In computer systems or in some devices that perform computer functions or behave as computers, several circuits or devices are typically connected with one another via a communication bus so that they can communicate with each other. If the devices do not have to provide any information to the bus (i.e. the devices are inactive), the devices go into a high-impedance state. In this case, a pull-up resistor weakly pulls the voltage on the bus to the high logic level. When one of the devices becomes active, it will override the logic level that is maintained by the pull-up resistor in order to communicate on the bus.
In the case of a tri-state bus, there are three scenarios for the output of the devices that are connected to the bus: a logic low level, a logic high level and a floating level (i.e. a tri-state mode where the devices are not active). In contrast to the previous pull-up resistor example, a bus keeper circuit (also known as a bus-holder circuit) is connected to the tri-state bus to weakly hold the last logic value on the bus. This is done to prevent a floating voltage level on the bus since, in this case, the gates of both input transistors of a device that is connected to the tri-state bus can turn on which essentially provides a short-circuit connection between the power supply and ground which can damage the gates. Conventional bus keeper circuits include a first CMOS inverter connected in series to a second CMOS inverter and a resistor connected in series to the second inverter. The transistors used in each inverter have a similar amount of drive and therefore the inverters are symmetrical. The first inverter and the resistor are connected to the tri-state bus such that the bus keeper circuit is connected in parallel with the tri-state bus. The resistor drives the bus weakly to either the low logic level or the high logic level (i.e. whichever was the last logic value on the bus) and the other circuits that are connected to the tri-state bus can override the value of the bus when they are not in the tri-state mode.
The conventional bus keeper circuit is suitable for use with communication buses that have symmetrical impedance drive. However, there are some cases in which the communication bus has an asymmetrical impedance drive. This results in an asymmetrical noise margin between the high and low logic states. This is problematic when glitches occur, since the tri-state bus can be driven to an incorrect logic level when a conventional bus keeper circuit is used.